package linguo.level.mapObjects;

import java.awt.Color;
import java.awt.Graphics;

import linguo.Data;
import linguo.level.Board;
import linguo.player.Bullet;
import linguo.player.Robot;

public abstract class ObjetoDestruible extends MapObject {

	protected int vidaActual, vidaMax;
	protected Premio premio;

	public ObjetoDestruible(Board board, int x, int y, CasilleroTransitable casillero) {
		super(board, x, y, casillero);
		premio = null;
	}

	public void render(Graphics g) {
		super.render(g);

		// Health Bar
		if (vidaActual < vidaMax) {
			g.setColor(Color.BLACK);
			g.fillRect(x + Data.SPRITE_SIZE / 4, y + 2, Data.SPRITE_SIZE / 2, 5);
			g.setColor(Color.GREEN);
			float vidaP = (Data.SPRITE_SIZE / 2) * ((float) vidaActual / (float) vidaMax);
			g.fillRect(x + Data.SPRITE_SIZE / 4, y + 2, (int) vidaP, 5);
			g.setColor(Color.BLACK);
			g.drawRect(x + Data.SPRITE_SIZE / 4, y + 2, Data.SPRITE_SIZE / 2, 5);
		}
	}

	/**
	 * Asigna un premio al objeto
	 * @param premio 
	 */
	public void asignarPremio(Premio premio) {
		this.premio = premio;
	}

	public boolean isSolid() {
		return existe ? true : false;
	}
	
	public void transitar(Robot robot) {
	}

	public void atacar(Bullet bullet) {
		if (this.existe) {
			vidaActual -= bullet.getDamage();
			bullet.destruir();
			if (vidaActual <= 0) {
				destruir();
				bullet.getRobot().incrementarScore(2);
			}
		}
	}

	/**
	 * Quita el objeto del mapa y pone en su lugar el premio en caso de haber.
	 */
	protected void destruir() {
		board.removerObjeto(this);
		this.existe = false;

		// pone el premio en esta posicion
		if (premio != null) {
			board.agregarObjeto(premio);
			casillero.setObjeto(premio);
		}
	}

}
